package language.advanced.generic;

import lombok.SneakyThrows;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class geneTrans {

    @SneakyThrows
    public static void main(String[] args){
        class Particle<POSITION, MOMENTUM> {}
        Particle<Object, Object> p = new Particle<>();
        System.out.println(Arrays.toString(p.getClass().getTypeParameters()));
        //泛型擦除，可以获得标识符

        List<String> listString = new ArrayList<String>();
        //运行时用反射的方式给一个String的List放入一个数字1
        listString.getClass().getMethod("add", Object.class).invoke(listString, 1);
        System.out.println("listString size:" + listString.size());
        for (String i :listString){
            System.out.println(i); //编译器自动做类型检查
        }
    }

    // private ? field  不可以，没有意义，不如用Object
    // private Class<?> field  可以
    //当多个泛型类型参数之间有依赖关系的时候，可以使用泛型方法。
    public <T extends B,B> void a(B b, T a){

    }

    public <B> void a(B b, List<? extends B> a){

    }
}